package cn.tedu.collection;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/*本类用于测试Set*/
public class TestSet {
    public static void main(String[] args) {
        //1.创建对应的集合对象
        Set<String> set = new HashSet<>();
        //2.存入数据
        set.add("紫霞仙子");
        set.add("蜘蛛精");
        set.add("至尊宝");
        set.add("紫霞仙子");
        set.add(null);
        set.add("null");
//        set.add("null");
//        set.add(null);
        /*1.set集合中的元素都是没有顺序的
         * 2.set集合中的元素不能重复
         * 3.set集合可以存null值，但是最多只有一个*/
        System.out.println(set);//[蜘蛛精, null, 至尊宝, 紫霞仙子]

        //3.常用方法测试
        System.out.println(set.contains("唐僧"));//false,判断是否包含指定元素
        System.out.println(set.isEmpty());//false，判断是否为空
        System.out.println(set.remove(null));//true，移除集合中的指定的元素
        System.out.println(set);//[蜘蛛精, 至尊宝, 紫霞仙子]
        System.out.println(set.size());//3,获取集合中元素的个数
        System.out.println(Arrays.toString(set.toArray()));//[蜘蛛精, 至尊宝, 紫霞仙子],将集合转为数组


        //4.1创建set2集合，并向集合中存入数据
        Set<String> set2 = new HashSet<>();
        set2.add("小兔纸");
        set2.add("小脑斧");
        set2.add("小海疼");
        set2.add("小牛犊");
        System.out.println("set2:"+set2);//[小兔纸, 小海疼, 小牛犊, 小脑斧]
        System.out.println(set2.addAll(set));//将set2集合的所有元素添加到set集合中
        System.out.println("set:"+set);
        System.out.println(set2);
        //set [蜘蛛精, 至尊宝, 紫霞仙子]
        //set2 [小兔纸, 蜘蛛精, 小海疼, 至尊宝, 小牛犊, 小脑斧, 紫霞仙子]
        System.out.println(set.containsAll(set2));//判断set2集合的所有元素是否都在set集合中//false
        System.out.println(set2.removeAll(set));//删除set集合中属于set2集合的所有元素//addAll对应removeAll
        System.out.println(set2);//[小兔纸, 小海疼, 小牛犊, 小脑斧]
//        System.out.println(set.retainAll(set2));//只保留set集合中属于set和set2集合的公共元素
//        System.out.println(set);//[]

        //5.集合的迭代
       /* Iterator<String> it = set2.iterator();//5.1获取集合的迭代器 //Set2元素类型个数没有变化
        while(it.hasNext()) {//5.2判断集合是否有下个元素 //hasNext知道hasPrevious,,,底层相当于运行到元素个数的下标, -->hasNext为False, 但是逆序的hasPrevious为true
            //底层在下标之间对接,做了处理


            String s = it.next();//5.3如果有,进循环获取当前遍历到的元素
            System.out.println(s);
        }*/
    }
}